#ifndef SPINBOX_H
#define SPINBOX_H



#include <QtUiPlugin/QDesignerExportWidget>
#include <QWidget>

namespace Ui {
class SpinBox;
}

class QDESIGNER_WIDGET_EXPORT SpinBox : public QWidget
{
    Q_OBJECT

    ///////// 定义可在QDesigner中设置的属性 //////////////
    //前缀
    Q_PROPERTY(QString prefix READ prefix WRITE setPrefix)
    //后缀
    Q_PROPERTY(QString suffix READ suffix WRITE setSuffix)
    //可清理的
    Q_PROPERTY(QString cleanText READ cleanText)
    //最小值
    Q_PROPERTY(int minimum READ minimum WRITE setMinimum)
    //最大值
    Q_PROPERTY(int maximum READ maximum WRITE setMaximum)
    //增加和减少的步长
    Q_PROPERTY(int singleStep READ singleStep WRITE setSingleStep)
    //设置value
    Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged USER true)


public:

    explicit SpinBox(QWidget *parent = nullptr);
    ~SpinBox();

    //读取和设置前缀
    QString prefix() const;
    void setPrefix(const QString &prefix);

    //读取和设置后缀
    QString suffix() const;
    void setSuffix(const QString &suffix);

    //清空数据
    QString cleanText() const;

    //设置增加/减少的步长
    int singleStep() const;
    void setSingleStep(int val);

    //读取和设置最小值
    int minimum() const;
    void setMinimum(int min);

    //读取和设置最大值
    int maximum() const;
    void setMaximum(int max);

    //设置取值范围
    void setRange(int min, int max);

    //读取值
    int value() const;

public Q_SLOTS:
    //设置值
    void setValue(int val);

Q_SIGNALS:

    //值（int）发生变化时触发的信号
    void valueChanged(int);
    //值（QString）发生变化时触发的信号
    void textChanged(const QString &);

private slots:
    //增加按钮被点击的事件，按照设定的步长来增加值
    void on_addButton_clicked();
    //增加按钮被点击的事件，按照设定的步长来增加值
    void on_subButton_clicked();
    //输入框的数据变化时触发当前对象的textChanged信号
    void on_spinBox_textChanged(const QString &arg1);
    //输入框的数据变化时触发当前对象的valueChanged信号
    void on_spinBox_valueChanged(int arg1);

private:
    Ui::SpinBox *ui;
};

#endif // SPINBOX_H
